[UPDATE] AWS Elemental MediaPackage v2でアクセスログがサポートされました!
はじめに
清水です。AWS Elemental MediaPackage v2でAccess Loggingサポートのアップデートがありました!2024/11/27時点でまだWhat's New at AWSへのポストは確認できませんが、MediaPackage v2 User GuideのDocument historyで2024/11/15付けのアップデートを確認できます。
引用元: Document history for the MediaPackage User Guide - AWS Elemental MediaPackage
2023年5月にリリースされたMediaPackage v2、リリース時からフィーチャーされたlow-latency HLSサポートのほか、MediaLiveとのCMAF Ingest連携やそれを用いたCross-region failoverアーキテクチャ、そしてAV1コーデックなど、MediaPackage v1にはない機能が続々とサポートされてきました。しかしMediaPackage v2ではこれまでアクセスロギングがサポートされていなかったことから、v1からv2に移行したいと考えながらも足踏み状態になってしまった、というケースもあったのではないでしょうか。
リリースからおよそ1年半、やっとMediaPackage v2にもアクセスログがやってきてくれました!本エントリでは実際にMediaPackage v2でアクセスログを有効にして、その内容を確認してみたのでまとめてみたいと思います。
MediaPackage v2でアクセスログを有効化してみた
MediaPackage v2のアクセスログですが、Channel gropu単位で有効/無効を設定します。User Guideの以下ページを参考に、Channel gropuの作成時にアクセスログを有効化するかたちで設定してみました。
なお、現段階で設定したアクセスログの保存先を変更する、ということはできないようです。ログ保存先を変更する必要がある場合、いちどログ設定を削除して保存先を変更した新しいログの設定を行いましょう。
Channel groupsの作成とアクセスログの有効化
MediaPackageのマネジメントコンソール、Live v2のChannel groupsのページから(Create channel group)ボタンで進みます。Channel group nameと、必要に応じてDescriptionを入力しましょう。さて、従来はこのCreate channel groupの画面、Channel group nameとDescriptionの2つの設定項目しかありませんでしたが(例えばリリース時のマネジメントコンソール画面のようすはこちらのブログエントリから確認できます)、Access Loggingの項目が増えていますね。(マネジメントコンソールのデザインもCloudscapeを使ったものに変わっています。)
まずはEgress Access Logs(Origin endpoint側のアクセスログ)を有効化しましょう。(Add)ボタンを押下すると、「To Amazon CloudWatch Logs」、「To Amazon S3」、「To Amazon Data Firehose」と3つのサービスが現れます。
MediaPackage v1ではアクセスログの送信先はCloudWatch Logsのみでしたが、MediaPackage v2ではCloudWatch Logsに加えてS3やFirehoseへの送信も可能となっています。ただしマネジメントコンソールによると、MediaPackage v2ではCloudWatch Vended Logsを使用してアクセスログを出力しているとのことで、これに応じたCloudWatchの料金が発生する点に注意しましょう。(参考: CloudWatch Logsの機能「Vended Logs」について調べてみた | DevelopersIO)
今回はアクセスログの出力先としてCloudWatch Logsを使用します。なおS3とFirehoseを選択した場合は、「Cross account」もしくは「In current account」を選択できるようになっています。
「To Amazon CloudWatch Logs」を選択すると、Destination log groupの項目が現れます。今回はデフォルトの値のまま進めました。(mediapackagev2-alpha
のalpha
が気になるところではありますが。)
なお、Additional settingsの項目を展開すると以下のように設定項目が現れます。出力されるログの内容(フィールド)、出力フォーマットや区切り文字を指定できるようですね。今回はいずれもデフォルトのまま進めてみました。
Ingress Access Logs(ChannelのIngest endpoint側のアクセスログ)についても同様に「To Amazon CloudWatch Logs」を選択、デフォルトのDestination log groupを使用して設定しました。Additional settingsもデフォルトのままです。Field selectionの項目についてはEgressと項目数が異なるようですね。
Channel groupが作成できました。Loggingの項目を確認すると、Log deliveryにEGRESS_ACCESS_LOGS
とINGRESS_ACCESS_LOGS
の2つの項目が並んでいます。Destinationの列はリンクになっており、クリックするとCloudWatch Logsのマネジメントコンソールに遷移します。
以上でアクセスログ自体の設定は完了です。続いてMediaPackageのChannelとOrigin endpointのリソース、MediaLiveのリソースなどを作成していきます。
ChannelとOrigin Endpointの作成
MediaPackageのChannel作成、Channel group詳細画面のChannelsの項目、(Create channel)ボタンから進みます。
Channel nameを適切に入力、Input typeとして今回はHLS
を選択しました。Channel policyはDont' attach a policy
で進めます。
続いて、Channel詳細画面のOrigin endpointsの項目から(Create endpont)ボタンを押下しOrigin endpointを作成します。Nameを適切に設定、Container typeはTS
を今回は選択しました。その他の項目はでデフォルトで進め、Endpoint policyについては今回は検証目的ということでAttach a public policy
を選択しました。Manifest definitionsではHLS manifestを追加、Manifest nameとChild manifest nameを適切に設定しています。
MediaLiveリソースの作成とライブストリームの開始
MediaPackageと連携するMediaLiveのリソースを作成します。以下ブログエントリと同様の手順での作成となるため詳細は割愛します。
MediaPackageのマネジメントコンソールデザインが変わっているため、MediaPackage ChannelのIngest endpoint確認箇所だけスクリーンショットを掲示しておきましょう。以下の箇所ですね。(新しいマネジメントコンソール、あくまで変わったのはデザインだけで、各設定項目の場所は変わっていないようですね。)
MediaLiveリソースを作成したらMediaLive ChannelをStartさせます。またStreaming Softwareから映像をMediaLive Inputに向けて打ち上げます。今回はOBS Studioを使用しました。
映像を打ち上げたあと、MedidaLive Cahnnelのマネジメントコンソール、Previw表示で映像に問題がないことを確認しておきます。
またMediaPackage v2のマネジメントコンソール、Origin endpoint詳細画面のManifest settingsの項目、(Preview)ボタンからEndpoint URLが指定されたhls.js demoページを開きます。
(ちょっとピンボケしてるなぁ、などと)ライブストリームされる映像を確認しておきましょう。ライブストリームが正常に行われている確認のほか、Egressのアクセスログ生成につながります。
MediaPackage v2のアクセスログを確認してみた
MediaPackage v2でChannel groupにアクセスログを設定し、Channelに対してMediaLiveと連携、ライブストリームを開始しました。実際に生成されているアクセスログを確認していきましょう。
先ほどのMediaPacakge v2 Channel groupのマネジメントコンソール、Loggingの項目のDestinationの列のリンクから遷移するCloudWatch Logsマネジメントコンソールを確認します。
Ingressのアクセスログを確認
まずはIngressのアクセスログを確認します。Log streamsの項目、MediaPackage_Ingress_accessLogs
の文字列をクリックします。
ずらりとログが並んでいますね。なお、ログの出力については5分間隔で実施されているようでした。(User Guideには"Access logs can take a few minutes to appear in your destination. If you don't see the logs, wait a few minutes and try again."と記載があります。)今回の例では、11:40ごろ、11:45ごろ、11:50ごろ、といった時間に確認すると、それまでの5分間のログが出力されていた、という具合でした。
実際のIngressアクセスログをいくつか以下に記載します。user_agent
はAWSElementalMediaLive
となっています、またclient_ip
は先ほどMediaLive ChannelのマネジメントコンソールでPrevewを確認した際にちらっと映り込んでいたMediaLiveのEgress endpoints Source IPと一致することが確認できます。そして、PUT
のほかDELETE
リクエストのログもありました。MediaLive側で古いセグメントファイルを削除するリクエストを行っていることが実際に確認できますね。
{
"resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
"event_timestamp": 1732761900316,
"client_ip": "13.XXX.XXX.80",
"time_to_first_byte": 0.031,
"status_code": 200,
"received_bytes": 2209,
"sent_bytes": 416,
"method": "PUT",
"request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_720p30.m3u8",
"protocol": "HTTP/1.1",
"user_agent": "AWSElementalMediaLive",
"domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
"request_id": "Root=1-67xxxx2c-52xxxxxxxxxxxxxxxxxxxxd0",
"account": "123456789012",
"channel_id": "mediapackage-v2-access-logging-channel",
"channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
"channel_group_id": "mediapackage-v2-access-logging-channel-group",
"input_type": "",
"input_index": 1
}
{
"resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
"event_timestamp": 1732761900317,
"client_ip": "13.XXX.XXX.80",
"time_to_first_byte": -3,
"status_code": 204,
"received_bytes": 256,
"sent_bytes": 108,
"method": "DELETE",
"request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_720p30_00309.ts",
"protocol": "HTTP/1.1",
"user_agent": "AWSElementalMediaLive",
"domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
"request_id": "Root=1-67xxxx2c-7cxxxxxxxxxxxxxxxxxxxxca",
"account": "123456789012",
"channel_id": "mediapackage-v2-access-logging-channel",
"channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
"channel_group_id": "mediapackage-v2-access-logging-channel-group",
"input_type": "",
"input_index": 1
}
{
"resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
"event_timestamp": 1732761900337,
"client_ip": "13.XXX.XXX.80",
"time_to_first_byte": 0.114,
"status_code": 200,
"received_bytes": 647596,
"sent_bytes": 416,
"method": "PUT",
"request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_1080p30_00330.ts",
"protocol": "HTTP/1.1",
"user_agent": "AWSElementalMediaLive",
"domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
"request_id": "Root=1-67xxxx2c-6exxxxxxxxxxxxxxxxxxxx04",
"account": "123456789012",
"channel_id": "mediapackage-v2-access-logging-channel",
"channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
"channel_group_id": "mediapackage-v2-access-logging-channel-group",
"input_type": "",
"input_index": 1
}
Egressのアクセスログを確認
続いてEgressのアクセスログについても確認してみましょう。Log streamsの項目、MediaPackage_Egress_accessLogs
の文字列をクリックします。Ingress同様、ログの出力間隔は5分ごとのようでした。ログが出力されていない、更新されていない、といった場合は数分待ってみましょう。
Egressについてもずらりとログが並びます。(とはいえ、今回は1クライアントからのみしかアクセス、ライブストリームの視聴は行っていないので、Ingressよりログの量は少ないですね。)
Egressの実際のアクセスログは以下のようなものでした。client_ip
は実際にライブストリームを視聴している環境のIPアドレスとなっています。(今回はCDNを使用していませんが、CDNを使用している場合はここがCDNのIPアドレスになる認識です。)
{
"resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
"event_timestamp": 1732762143642,
"client_ip": "XXX.XXX.XXX.XXX",
"time_to_first_byte": 0.021,
"status_code": 200,
"received_bytes": 125,
"sent_bytes": 976,
"method": "GET",
"request_uri_base": "https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/out/v1/mediapackage-v2-access-logging-channel-group/mediapackage-v2-access-logging-channel/mediapackage-v2-access-logging-origin-endpoint/variant_1.m3u8",
"request_query_params": "",
"protocol": "HTTP/2.0",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"domain_name": "xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
"request_id": "Root=1-67xxxx1f-56xxxxxxxxxxxxxxxxxxxx65",
"account": "123456789012",
"channel_id": "mediapackage-v2-access-logging-channel",
"channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
"endpoint_id": "mediapackage-v2-access-logging-origin-endpoint",
"endpoint_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel/originEndpoint/mediapackage-v2-access-logging-origin-endpoint",
"channel_group_id": "mediapackage-v2-access-logging-channel-group",
"manifest_name": "",
"manifest_type": ""
}
{
"resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
"event_timestamp": 1732762143968,
"client_ip": "XXX.XXX.XXX.XXX",
"time_to_first_byte": 0.123,
"status_code": 200,
"received_bytes": 126,
"sent_bytes": 4035035,
"method": "GET",
"request_uri_base": "https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/out/v1/mediapackage-v2-access-logging-channel-group/mediapackage-v2-access-logging-channel/mediapackage-v2-access-logging-origin-endpoint/segment_1_94.ts",
"request_query_params": "",
"protocol": "HTTP/2.0",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"domain_name": "xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
"request_id": "Root=1-67xxxx1f-60xxxxxxxxxxxxxxxxxxxx89",
"account": "123456789012",
"channel_id": "mediapackage-v2-access-logging-channel",
"channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
"endpoint_id": "mediapackage-v2-access-logging-origin-endpoint",
"endpoint_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel/originEndpoint/mediapackage-v2-access-logging-origin-endpoint",
"channel_group_id": "mediapackage-v2-access-logging-channel-group",
"manifest_name": "",
"manifest_type": ""
}
まとめ
AWS Elemental MediaPackage v2でアクセスログをサポートしたアップデートについてお届けしました。本番環境など実運用でMediaPackage v2を使用する際に待ち望んでいたアップデートです。これを機に、MediaPackage v1からMediaPackage v2の移行を検討してみてはいかがでしょうか。
またMediaPackage v1と比べて、ログ送信先としてS3やFirehoseも選択できるようになったり、出力フィールドやフォーマットなども選択できるようになったりと、機能強化されている点も嬉しいですよね!このS3やFirehose連携などについても、別途確認できればと思います。